package io.zsy.annotation.aop;

import io.zsy.annotation.dao.UserDao;
import io.zsy.annotation.dao.UserMapper;

import java.lang.reflect.Proxy;

/**
 * @author zhangshuaiyin
 * @date 2022/4/25 20:28
 */
public class JdkProxy {
    public static void main(String[] args) {
        Class<?>[] interfaces = {UserDao.class};
        UserDao userMapper = new UserMapper();
        UserDao userDao = (UserDao) Proxy.newProxyInstance(JdkProxy.class.getClassLoader(), interfaces, (proxy, method, params) -> {
            // 执行代理方法之前
            System.out.println("JdkProxy - 动态代理方法执行前执行逻辑");

            // 被代理的方法执行， proxy是被代理的对象，method是被代理对象的方法
            method.invoke(userMapper, params);

            // 执行代理方法之后
            System.out.println("JdkProxy - 动态代理方法执行后执行逻辑");
            return proxy;
        });
        userDao.add();
    }
}
